package com.hibase.upms.entity.menu;

import com.baomidou.mybatisplus.annotation.TableField;
import com.hibase.core.mybatis.entity.BaseDO;
import com.hibase.upms.constant.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 
 * </p>
 *
 * @author hufeng
 * @since 2019-04-03
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel(value = "菜单")
public class MdsMenu extends BaseDO implements Comparable<MdsMenu>{

    private static final long serialVersionUID = 1L;

    /**
     * 代码
     */
//    @UniqueKey(message = "目录编号不能重复")
    @ApiModelProperty(value = "代码")
    private String code;

    /**
     * 名称
     */
    @ApiModelProperty(value = "名称")
    private String name;

    /**
     * 模块ICO图标
     */
    @ApiModelProperty(value = "模块ICO图标")
    private String icon;

    /**
     * 资源标识符 唯一
     */
    @ApiModelProperty(value = "资源标识符 唯一")
    private String permission;

    /**
     * 排序
     */
    @ApiModelProperty(value = "排序")
    private BigDecimal sort;

    /**
     * 模块类型(MENU菜单 PAGE页面  OPERATION操作 ELEMENT元素)
     */
    @ApiModelProperty(value = "模块类型(MENU菜单 PAGE页面  OPERATION操作 ELEMENT元素)")
    private String type;

    /**
     * 终端类型分组(BROWSER浏览器 APP移动端 H5等)
     */
    @ApiModelProperty(value = "终端类型分组(BROWSER浏览器 APP移动端 H5等)")
    private String groupType;

    /**
     * 终端类型（WEB/PDA/PDA_WMS等）
     */
    @ApiModelProperty(value = "终端类型（WEB/PDA/PDA_WMS等）")
    private String clientType;

    /**
     * 父类型id
     */
    @ApiModelProperty(value = "父类型id")
    private String parentId;

    /**
     * 请求路径
     */
    @ApiModelProperty(value = "请求路径")
    private String url;

    /**
     * 转发url（真实请求url）
     */
    @ApiModelProperty(value = "转发url（真实请求url）")
    private String trueUrl;

    /**
     * 权限过滤对应实体类
     */
    @ApiModelProperty(value = "权限过滤对应实体类")
    private String clazz;

    /**
     * 状态（true 启用 false禁用）
     */
    @ApiModelProperty(value = "状态（true 启用 false禁用）")
    private Boolean beActive;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    private String remarks;

    /**
     * 路由路径
     */
    @ApiModelProperty(value = "路由路径")
    private String path;

    /**
     * 路由名称
     */
    @ApiModelProperty(value = "路由名称")
    private String pathName;

    /**
     * 组件路径
     */
    @ApiModelProperty(value = "组件路径")
    private String component;

    /**
     * 是否隐藏（0 正常，1 已隐藏）
     */
    @ApiModelProperty(value = "是否隐藏（0 正常，1 已隐藏）")
    private Boolean beHide;

    /**
     * 子级数量
     */
    @ApiModelProperty(value = "子级数量")
    private Integer childNumber;

    /**
     * 全路径名称
     */
    @ApiModelProperty(value = "全路径名称")
    private String fullName;

    /**
     * 父类ID集合
     */
    @ApiModelProperty(value = "父类ID集合")
    private String allParentIds;

    /**
     * 是否开启系统保护，默认关闭
     */
    @ApiModelProperty(value = "是否开启系统保护，默认关闭")
    private Boolean beSystemProtect;

    /**
     * 页面类型(STANDARD/CUSTOMER)
     *  {@link MenuType}
     */
    @ApiModelProperty(value = "页面类型(STANDARD/CUSTOMER)")
    private String pageType;

    /**
     * 菜单子项
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "菜单子项")
    private List<MdsMenu> menuBODetail;

    @Override
    public int compareTo(MdsMenu o) {
        return o.getSort().intValue()-this.getSort().intValue();
    }
}
